Fixing up some ABI issues git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@134639 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/future b/include/future index 48b84cf..9f3780b 100644 --- a/include/future +++ b/include/future
@@ -452,6 +452,8 @@ _LIBCPP_INLINE_VISIBILITY const error_code& code() const throw() {return __ec_;} + + virtual ~future_error() _NOEXCEPT; }; class __assoc_sub_state
diff --git a/include/istream b/include/istream index 024f5ce..c56393a 100644 --- a/include/istream +++ b/include/istream
@@ -177,11 +177,13 @@ virtual ~basic_istream(); protected: #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES + _LIBCPP_INLINE_VISIBILITY basic_istream(basic_istream&& __rhs); #endif // 27.7.1.1.2 Assign/swap: #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES + _LIBCPP_INLINE_VISIBILITY basic_istream& operator=(basic_istream&& __rhs); #endif void swap(basic_istream& __rhs); @@ -1504,11 +1506,13 @@ virtual ~basic_iostream(); protected: #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES + _LIBCPP_INLINE_VISIBILITY basic_iostream(basic_iostream&& __rhs); #endif // assign/swap #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES + _LIBCPP_INLINE_VISIBILITY basic_iostream& operator=(basic_iostream&& __rhs); #endif void swap(basic_iostream& __rhs);
diff --git a/include/ostream b/include/ostream index 6730cab..f1a3de9 100644 --- a/include/ostream +++ b/include/ostream
@@ -154,11 +154,13 @@ virtual ~basic_ostream(); protected: #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES + _LIBCPP_INLINE_VISIBILITY basic_ostream(basic_ostream&& __rhs); #endif // 27.7.2.3 Assign/swap #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES + _LIBCPP_INLINE_VISIBILITY basic_ostream& operator=(basic_ostream&& __rhs); #endif void swap(basic_ostream& __rhs);
diff --git a/include/string b/include/string index 5996c32..7d0d53a 100644 --- a/include/string +++ b/include/string
@@ -3970,54 +3970,6 @@ extern template class basic_string<wchar_t>; extern template - enable_if<__is_forward_iterator<char const*>::value, void>::type - basic_string<char, char_traits<char>, allocator<char> >:: - __init<char const*>(char const*, char const*); - -extern template - enable_if<__is_forward_iterator<wchar_t const*>::value, void>::type - basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> >:: - __init<wchar_t const*>(wchar_t const*, wchar_t const*); - -extern template - enable_if<__is_forward_iterator<char*>::value, - basic_string<char, char_traits<char>, allocator<char> >&>::type - basic_string<char, char_traits<char>, allocator<char> >:: - append<char*>(char*, char*); - -extern template - enable_if<__is_forward_iterator<wchar_t*>::value, - basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> >&>::type - basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> >:: - append<wchar_t*>(wchar_t*, wchar_t*); - -extern template - enable_if<__is_forward_iterator<char const*>::value, - string::iterator>::type - string:: - insert<char const*>(string::const_iterator, char const*, char const*); - -extern template - enable_if<__is_forward_iterator<wchar_t const*>::value, - wstring::iterator>::type - wstring:: - insert<wchar_t const*>(wstring::const_iterator, wchar_t const*, wchar_t const*); - -extern template - enable_if<__is_input_iterator<char const*>::value, string&>::type - string:: - replace<char const*>(string::const_iterator, string::const_iterator, char const*, char const*); - -extern template - enable_if<__is_input_iterator<wchar_t const*>::value, wstring&>::type - wstring:: - replace<wchar_t const*>(wstring::const_iterator, wstring::const_iterator, wchar_t const*, wchar_t const*); - -extern template - enable_if<__is_forward_iterator<wchar_t*>::value, wstring&>::type - wstring::assign<wchar_t*>(wchar_t*, wchar_t*); - -extern template string operator+<char, char_traits<char>, allocator<char> >(char const*, string const&);
diff --git a/include/strstream b/include/strstream index 8f4ed0c..4ff34a5 100644 --- a/include/strstream +++ b/include/strstream
@@ -150,7 +150,9 @@ strstreambuf(const unsigned char* __gnext, streamsize __n); #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES + _LIBCPP_INLINE_VISIBILITY strstreambuf(strstreambuf&& __rhs); + _LIBCPP_INLINE_VISIBILITY strstreambuf& operator=(strstreambuf&& __rhs); #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES @@ -187,6 +189,43 @@ void __init(char* __gnext, streamsize __n, char* __pbeg); }; +#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES + +inline _LIBCPP_INLINE_VISIBILITY +strstreambuf::strstreambuf(strstreambuf&& __rhs) + : streambuf(__rhs), + __strmode_(__rhs.__strmode_), + __alsize_(__rhs.__alsize_), + __palloc_(__rhs.__palloc_), + __pfree_(__rhs.__pfree_) +{ + __rhs.setg(nullptr, nullptr, nullptr); + __rhs.setp(nullptr, nullptr); +} + +inline _LIBCPP_INLINE_VISIBILITY +strstreambuf& +strstreambuf::operator=(strstreambuf&& __rhs) +{ + if (eback() && (__strmode_ & __allocated) != 0 && (__strmode_ & __frozen) == 0) + { + if (__pfree_) + __pfree_(eback()); + else + delete [] eback(); + } + streambuf::operator=(__rhs); + __strmode_ = __rhs.__strmode_; + __alsize_ = __rhs.__alsize_; + __palloc_ = __rhs.__palloc_; + __pfree_ = __rhs.__pfree_; + __rhs.setg(nullptr, nullptr, nullptr); + __rhs.setp(nullptr, nullptr); + return *this; +} + +#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES + class _LIBCPP_VISIBLE istrstream : public istream {
diff --git a/src/string.cpp b/src/string.cpp index 793a58b..7e651a1 100644 --- a/src/string.cpp +++ b/src/string.cpp
@@ -19,52 +19,6 @@ template class basic_string<char>; template class basic_string<wchar_t>; -template enable_if<__is_forward_iterator<char const*>::value, void>::type - basic_string<char, char_traits<char>, allocator<char> > - ::__init<char const*>(char const*, char const*); - -template enable_if<__is_forward_iterator<wchar_t const*>::value, void>::type - basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> > - ::__init<wchar_t const*>(wchar_t const*, wchar_t const*); - -template - enable_if<__is_forward_iterator<char*>::value, - basic_string<char, char_traits<char>, allocator<char> >&>::type - basic_string<char, char_traits<char>, allocator<char> >:: - append<char*>(char*, char*); - -template - enable_if<__is_forward_iterator<wchar_t*>::value, - basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> >&>::type - basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> >:: - append<wchar_t*>(wchar_t*, wchar_t*); - -template - enable_if<__is_forward_iterator<char const*>::value, - string::iterator>::type - string:: - insert<char const*>(string::const_iterator, char const*, char const*); - -template - enable_if<__is_forward_iterator<wchar_t const*>::value, - wstring::iterator>::type - wstring:: - insert<wchar_t const*>(wstring::const_iterator, wchar_t const*, wchar_t const*); - -template - enable_if<__is_input_iterator<char const*>::value, string&>::type - string:: - replace<char const*>(string::const_iterator, string::const_iterator, char const*, char const*); - -template - enable_if<__is_input_iterator<wchar_t const*>::value, wstring&>::type - wstring:: - replace<wchar_t const*>(wstring::const_iterator, wstring::const_iterator, wchar_t const*, wchar_t const*); - -template - enable_if<__is_forward_iterator<wchar_t*>::value, wstring&>::type - wstring::assign<wchar_t*>(wchar_t*, wchar_t*); - template string operator+<char, char_traits<char>, allocator<char> >(char const*, string const&);
diff --git a/src/strstream.cpp b/src/strstream.cpp index c2b7f42..5313950 100644 --- a/src/strstream.cpp +++ b/src/strstream.cpp
@@ -100,41 +100,6 @@ __init((char*)__gnext, __n, nullptr); } -#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES - -strstreambuf::strstreambuf(strstreambuf&& __rhs) - : streambuf(__rhs), - __strmode_(__rhs.__strmode_), - __alsize_(__rhs.__alsize_), - __palloc_(__rhs.__palloc_), - __pfree_(__rhs.__pfree_) -{ - __rhs.setg(nullptr, nullptr, nullptr); - __rhs.setp(nullptr, nullptr); -} - -strstreambuf& -strstreambuf::operator=(strstreambuf&& __rhs) -{ - if (eback() && (__strmode_ & __allocated) != 0 && (__strmode_ & __frozen) == 0) - { - if (__pfree_) - __pfree_(eback()); - else - delete [] eback(); - } - streambuf::operator=(__rhs); - __strmode_ = __rhs.__strmode_; - __alsize_ = __rhs.__alsize_; - __palloc_ = __rhs.__palloc_; - __pfree_ = __rhs.__pfree_; - __rhs.setg(nullptr, nullptr, nullptr); - __rhs.setp(nullptr, nullptr); - return *this; -} - -#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES - strstreambuf::~strstreambuf() { if (eback() && (__strmode_ & __allocated) != 0 && (__strmode_ & __frozen) == 0)
diff --git a/test/utilities/type.index/type.index.members/lt.pass.cpp b/test/utilities/type.index/type.index.members/lt.pass.cpp index b442628..c099d1c 100644 --- a/test/utilities/type.index/type.index.members/lt.pass.cpp +++ b/test/utilities/type.index/type.index.members/lt.pass.cpp
@@ -28,8 +28,18 @@ assert( (t1 <= t2)); assert(!(t1 > t2)); assert( (t1 >= t2)); - assert(!(t1 < t3)); - assert(!(t1 <= t3)); - assert( (t1 > t3)); - assert( (t1 >= t3)); + if (t1 < t3) + { + assert( (t1 < t3)); + assert( (t1 <= t3)); + assert(!(t1 > t3)); + assert(!(t1 >= t3)); + } + else + { + assert(!(t1 < t3)); + assert(!(t1 <= t3)); + assert( (t1 > t3)); + assert( (t1 >= t3)); + } }